XXE VULNERABILITY

Bu zafiyet xml dosyalarından-paketlerinden kaynaklandığından dolayı öncelikle xml nedir buna değinelim.

 

XML NEDİR?

XML (Extensible Markup Language) html ile benzerlik gösterir. Fakat html dışında yapı bakımından tagleri geliştiricilerin oluşturduğu (örneğin xml ile <allsafe>x<allsafe> şeklinde de tag oluşturulabilir.) ve verileri c#, php, python, java gibi birçok dille kullanmamızı sağlayan veri iletim ve veri depolama arayüzü diyebiliriz. Yani örnek vermek gerekirse kullanıcının girdiği bir dizeden php diline girdi gelmesi gerekiyor, XML’in “simplexml_load_string()”

Şeklinde dizeden xml bilgi alınabilir. Ayrıca android uygulamalarında da xml arayüz kullanılmakta. 

 

XXE Injection Nedir?

Xml dosyalarının-kodlarının kullanıldığı bölümlerde araya kendi xml kodlarımızı ekleyerek web sitenin önemli bilgilerini elde etmemiz olarak açıklayabiliriz. XXE zafiyetini incelerken sadece mevcut xml paketlerine bakmamız yeterli olmayabilir bunun yanında dosya yükleme zafiyetini de göz önünde bulundurarak xml uzantılı bir dosya yükleyebilirsek yine bir xxe zafiyetine ulaşmış olacağız.

 

 

NASIL TEST EDİLİR?

XML içeren paketlere kendi xml kodumuzu ekleyebiliriz. Url, kullanıcının girdilerini xml paketiyle kaydediyorsa injection uygulayabiliriz. Bir dosya yükleme açığı ile beraber bu zafiyet de tespit edilebilir ya da Out of Band Attack dediğimiz saldırı ile saldırı yapılan web sitede xml kodu çalışır ve bize ait olan bir sunucuya- web sitesine istek attırmış oluruz. PowerShell gibi programlarla log kayıtlarını inceleyerek saldırı yapılan web sitesinden istediğimiz veri elde edilmiş olur. Bu bölümde örneklere başlamadan belirtmek istediğim şey BurpSuite aracında paketlerle oynama yaparken Repeater üzerinden yapacağız. Bunun sebebi bulunan zafiyet web sitesinde direkt olarak gözükmeyebilir. Fakat response bölümünde bize istediğimiz sayfayı gösterebilir yani blind xxe olabilir. Bu yüzden gerçek bir web sitesinde de bu zafiyeti incelerken Repeater özelliğini kullanmaya özen göstermeliyiz.

Repeater kullanımı hakkında kısa bir bilgi:

İstediğimiz paket üzerinde sağ click >send to Repeater veya Ctrl+R yaparsak Repater sayfasına ulaşacağız. (Test aşamasında da kullanımı göreceğiz)

image

 

İlk örnekte bWAPP xxe çözeceğiz. Bize gelen pakette xml kodunu kullanarak robots.txt dosyasını görmüş olacağız.

image

Yukarıdaki sayfada Any bugs? Butonuna tıkladığımızda karşımıza aşağıda işaretlediğim gibi xml kullanıldığını anladığımız bir paket geliyor.

image

Yukarıdaki Paketi Repeater’a yolluyoruz. Ve aşağıdaki gibi xml kodunu ekliyoruz.

image

Burada gördüğümüz gibi xml çalışan bir pakette parametrelerin altına xml kodunu yerleştirdik ve <login>bee</login> kodunu <login>&allsafe;</login> yaparak parametreyi çağırmış olduk ve sol üst kısımda bulunan send butonuna tıklıyoruz.

image

Bu şekilde xxe injection yaparak robots.txt dosyasını görmeyi başardık.

 

Şimdi de PortSwigger’ın bir labını çözelim. Bu sefer önem taşıyan /etc/passwd dosyasına ulaşmaya çalışacağız. 

 

image

Karşımıza çıkan bu sayfada BurpSuite  ile xml çalıştıran paket bulmaya çalışacağız. Sayfalarda gezmeye ve paketleri incelemeye başlıyoruz.

image

Yukarıda ki Check stock sekmesine tıkladığımızda aşağıdaki gibi xml çalıştıran bir paket görüyoruz.

image

Şimdi bu paketi Repeater’a yolluyoruz ve xml kodu ekliyoruz.

image <?xml version="1.0" encoding="UTF-8"?> kodunun altına 

<!DOCTYPE xxe [ <!ENTITY allsafe SYSTEM "file:///etc/passwd"> ]>

Şeklinde ekliyoruz ve <productId>&allsafe;</productId>

Olarak istediğimiz parametreyi çağırmış oluyoruz.

 

image

Ve /etc/passwd dosyasına ulaşmayı başardık. 

image

 

Peki Gerçek Web Sitelerinde XXE Injection Açığı Labaratuvardakiler Gibi Karşımıza Çıkar Mı?

Bu açık yazmış olduğumuz bu makaledeki örneklerde gösterdiğimiz gibi çıkabiliyor. Bunun yanı sıra Content-Type kısmında gördüğümüz xml’i Post /xxx/xxx/allsafe.xml?=1 şeklinde de görebiliriz. Yani xml’in bulunduğu yerlerde incelememiz gerekiyor. Veya /etc/passwd gibi önemli dosyalar yerine şu an da önemini biraz daha yitirmiş robots.txt sayfalara ulaşmayı deneyebiliriz. robots.txt dosyalarını göremememiz xxe olmadığı anlamına da gelmiyor yazdığımız kodları encode yaparak da denemeliyiz. Basit bir metin yazdırabiliriz. Ayrıca github gibi web sitelerinde kullanabileceğimiz bir çok hazır payloadlar da bulunmakta. (XXE payloads şeklinde aramayla bir çok payloada ulaşabiliriz.)

Birkaç XXE Injection Örnek Raporları

https://hackerone.com/reports/248668

https://hackerone.com/reports/500515

https://hackerone.com/reports/347139